package com.pig4cloud.pigx.common.customize.api.enums;

import com.pig4cloud.pigx.common.customize.i18n.constants.I18nMessages;
import lombok.AllArgsConstructor;
import lombok.Getter;

/**
 * 开放式API 异常 枚举
 *
 */
public class AbnormalEnum {

    @Getter
    @AllArgsConstructor
    public enum MSG {
        /**
         * 请求常规错误
         */
        UNKNOWN(10000, I18nMessages.UNKNOWN),
        /**
         * 服务器内部错误
         */
        DISCONNECTED(10001, I18nMessages.DISCONNECTED),
        /**
         * 请求权限不足
         */
        UNAUTHORIZED(10002, I18nMessages.UNAUTHORIZED),
        /**
         * 请求过多
         */
        TOO_MANY_REQUESTS(10003, I18nMessages.TOO_MANY_REQUESTS),
        /**
         * IP地址已经在白名单
         */
        DUPLICATE_IP(10004, I18nMessages.DUPLICATE_IP),
        /**
         * 白名单无此IP
         */
        NO_SUCH_IP(10005, I18nMessages.NO_SUCH_IP),
        /**
         * 从消息总线收到意外的响应。执行状态未知
         */
        UNEXPECTED_RESP(10006, I18nMessages.UNEXPECTED_RESP),
        /**
         * 请求超时
         */
        TIMEOUT(10006, I18nMessages.TIMEOUT),
        /**
         * 参数不合法
         */
        UNKNOWN_ORDER_COMPOSITION(10014, I18nMessages.UNKNOWN_ORDER_COMPOSITION),
        /**
         * 该服务不可用
         */
        SERVICE_SHUTTING_DOWN(10016, I18nMessages.SERVICE_SHUTTING_DOWN),
        /**
         * 不支持此操作
         */
        UNSUPPORTED_OPERATION(10020, I18nMessages.UNSUPPORTED_OPERATION),
        /**
         * 此请求的时间戳比服务器时间提前
         */
        INVALID_TIMESTAMP(10021, I18nMessages.INVALID_TIMESTAMP),
        /**
         * 此请求的签名无效
         */
        INVALID_SIGNATURE(10022, I18nMessages.INVALID_SIGNATURE),
        /**
         * 参数里面的开始时间在结束时间之后
         */
        START_TIME_GREATER_THAN_END_TIME(10023, I18nMessages.START_TIME_GREATER_THAN_END_TIME),
        /**
         * 在参数中发现非法字符
         */
        ILLEGAL_CHARS(11000, I18nMessages.ILLEGAL_CHARS),
        /**
         * 参数过多,超出预期参数数量
         */
        TOO_MANY_PARAMETERS(11001, I18nMessages.TOO_MANY_PARAMETERS),
        /**
         * 未发送强制性参数，该参数为空或格式错误
         */
        MANDATORY_PARAM_EMPTY_OR_MALFORMED(11002, I18nMessages.MANDATORY_PARAM_EMPTY_OR_MALFORMED),
        /**
         * 发送了未知参数
         */
        UNKNOWN_PARAM(11003, I18nMessages.UNKNOWN_PARAM),
        /**
         * 并非所有发送的参数都被读取（有无效）
         */
        UNREAD_PARAMETERS(11004, I18nMessages.UNREAD_PARAMETERS),
        /**
         * 参数为空
         */
        PARAM_EMPTY(11005, I18nMessages.PARAM_EMPTY),
        /**
         * 发送了不需要的参数
         */
        PARAM_NOT_REQUIRED(11006, I18nMessages.PARAM_NOT_REQUIRED),
        /**
         * 精度溢出
         */
        BAD_PRECISION(11011, I18nMessages.BAD_PRECISION),
        /**
         * 该合约下没有挂单
         */
        NO_DEPTH(11012, I18nMessages.NO_DEPTH),
        /**
         * 无效的时间
         */
        INVALID_TIF(11015, I18nMessages.INVALID_TIF),
        /**
         * 无效的订单类型
         */
        INVALID_ORDER_TYPE(11016, I18nMessages.INVALID_ORDER_TYPE),
        /**
         * 无效的买卖方向
         */
        INVALID_SIDE(11017, I18nMessages.INVALID_SIDE),
        /**
         * 无效时间间隔
         */
        BAD_INTERVAL(11020, I18nMessages.BAD_INTERVAL),
        /**
         * 无效的交易币对
         */
        BAD_SYMBOL(11021, I18nMessages.BAD_SYMBOL),
        /**
         * 查询时间间隔过大
         */
        MORE_THAN_XX_HOURS(11027, I18nMessages.MORE_THAN_XX_HOURS),
        /**
         * 可选参数组合无效
         */
        OPTIONAL_PARAMS_BAD_COMBO(11028, I18nMessages.OPTIONAL_PARAMS_BAD_COMBO),
        /**
         * 发送的参数为无效数据
         */
        INVALID_PARAMETER(11030, I18nMessages.INVALID_PARAMETER),
        /**
         * 下单被拒绝
         */
        NEW_ORDER_REJECTED(20000, I18nMessages.NEW_ORDER_REJECTED),
        /**
         * 撤单被拒绝
         */
        CANCEL_REJECTED(20001, I18nMessages.CANCEL_REJECTED),
        /**
         * 订单不存在
         */
        NO_SUCH_ORDER(20002, I18nMessages.NO_SUCH_ORDER),
        /**
         * API-key 格式无效
         */
        BAD_API_KEY_FMT(20003, I18nMessages.BAD_API_KEY_FMT),
        /**
         * 无效的API密钥，IP或操作权限
         */
        REJECTED_MBX_KEY(20004, I18nMessages.REJECTED_MBX_KEY),
        /**
         * 余额不足
         */
        BALANCE_NOT_SUFFICIENT(20005, I18nMessages.BALANCE_NOT_SUFFICIENT),
        /**
         * 杠杆账户余额不足
         */
        MARGIN_NOT_SUFFICIENT(20006, I18nMessages.MARGIN_NOT_SUFFICIENT),
        /**
         * 无法成交
         */
        UNABLE_TO_FILL(20007, I18nMessages.UNABLE_TO_FILL),
        /**
         * 订单可能会被立即触发
         */
        ORDER_WOULD_IMMEDIATELY_TRIGGER(20008, I18nMessages.ORDER_WOULD_IMMEDIATELY_TRIGGER),
        /**
         * 订单被拒绝
         */
        REDUCE_ONLY_REJECT(20009, I18nMessages.REDUCE_ONLY_REJECT),
        /**
         * 订单正在处于强平状态
         */
        ORDER_IN_LIQUIDATION(20010, I18nMessages.ORDER_IN_LIQUIDATION),
        /**
         * 持仓数量不足
         */
        POSITION_NOT_SUFFICIENT(20011, I18nMessages.POSITION_NOT_SUFFICIENT),
        /**
         * 持仓数量已达上限
         */
        MAX_OPEN_ORDER_EXCEEDED(20012, I18nMessages.MAX_OPEN_ORDER_EXCEEDED),
        /**
         * 挂单或持仓超出当前初始杠杆下的最大值
         */
        MAX_LEVERAGE_RATIO(20013, I18nMessages.MAX_LEVERAGE_RATIO),
        /**
         * 调整初始杠杆过低，导致可用余额不足
         */
        MIN_LEVERAGE_RATIO(20014, I18nMessages.MIN_LEVERAGE_RATIO),
        /**
         * 订单状态不正确
         */
        INVALID_ORDER_STATUS(40000, I18nMessages.INVALID_ORDER_STATUS),
        /**
         * 价格小于0
         */
        PRICE_LESS_THAN_ZERO(40001, I18nMessages.PRICE_LESS_THAN_ZERO),
        /**
         * 价格超过最大值
         */
        PRICE_GREATER_THAN_MAX_PRICE(40002, I18nMessages.PRICE_GREATER_THAN_MAX_PRICE),
        /**
         * 数量小于0
         */
        QTY_LESS_THAN_ZERO(40003, I18nMessages.QTY_LESS_THAN_ZERO),
        /**
         * 数量小于最小值
         */
        QTY_LESS_THAN_MIN_QTY(40004, I18nMessages.QTY_LESS_THAN_MIN_QTY),
        /**
         * 数量超过最大值
         */
        QTY_GREATER_THAN_MAX_QTY(40005, I18nMessages.QTY_GREATER_THAN_MAX_QTY),
        /**
         * 触发价格小于最小值
         */
        STOP_PRICE_LESS_THAN_ZERO(40006, I18nMessages.STOP_PRICE_LESS_THAN_ZERO),
        /**
         * 触发价格大于最大值
         */
        STOP_PRICE_GREATER_THAN_MAX_PRICE(40007, I18nMessages.STOP_PRICE_GREATER_THAN_MAX_PRICE),
        /**
         * 价格精度小于0
         */
        TICK_SIZE_LESS_THAN_ZERO(40008, I18nMessages.TICK_SIZE_LESS_THAN_ZERO),
        /**
         * 最大价格小于最小价格
         */
        MAX_PRICE_LESS_THAN_MIN_PRICE(40009, I18nMessages.MAX_PRICE_LESS_THAN_MIN_PRICE),
        /**
         * 最大数量小于最小数量
         */
        MAX_QTY_LESS_THAN_MIN_QTY(40010, I18nMessages.MAX_QTY_LESS_THAN_MIN_QTY),
        /**
         * 最大订单数小于0
         */
        MAX_NUM_ORDERS_LESS_THAN_ZERO(40011, I18nMessages.MAX_NUM_ORDERS_LESS_THAN_ZERO),
        /**
         * 价格小于最低价格
         */
        PRICE_LESS_THAN_MIN_PRICE(40012, I18nMessages.PRICE_LESS_THAN_MIN_PRICE),
        /**
         * 价格增量不是价格精度的倍数
         */
        PRICE_NOT_INCREASED_BY_TICK_SIZE(40013, I18nMessages.PRICE_NOT_INCREASED_BY_TICK_SIZE),
        /**
         * 价格上限小于0
         */
        MULTIPLIER_UP_LESS_THAN_ZERO(40014, I18nMessages.MULTIPLIER_UP_LESS_THAN_ZERO),
        /**
         * 价格下限小于0
         */
        MULTIPLIER_DOWN_LESS_THAN_ZERO(40015, I18nMessages.MULTIPLIER_DOWN_LESS_THAN_ZERO),
        /**
         * 深度信息的limit值不正确
         */
        INVALID_DEPTH_LIMIT(40016, I18nMessages.INVALID_DEPTH_LIMIT),
        /**
         * 收益错误
         */
        COMMISSION_INVALID(40017, I18nMessages.COMMISSION_INVALID),
        /**
         * 账户类型错误
         */
        INVALID_ACCOUNT_TYPE(40018, I18nMessages.INVALID_ACCOUNT_TYPE),
        /**
         * 价格精度小数点位数不正确
         */
        INVALID_TICK_SIZE_PRECISION(40019, I18nMessages.INVALID_TICK_SIZE_PRECISION),
        /**
         * 不正确的参数类型
         */
        INVALID_WORKING_TYPE(40020, I18nMessages.INVALID_WORKING_TYPE),
        /**
         * 超过可取消的最大订单量
         */
        EXCEED_MAX_CANCEL_ORDER_SIZE(40021, I18nMessages.EXCEED_MAX_CANCEL_ORDER_SIZE),
        /**
         * 余额类型不正确
         */
        INVALID_BALANCE_TYPE(40022, I18nMessages.INVALID_BALANCE_TYPE),
        /**
         * 达到止损单的上限
         */
        MAX_STOP_ORDER_EXCEEDED(40023, I18nMessages.MAX_STOP_ORDER_EXCEEDED),
        /**
         * 全仓余额不足
         */
        CROSS_BALANCE_INSUFFICIENT(40024, I18nMessages.CROSS_BALANCE_INSUFFICIENT),
        /**
         * 逐仓余额不足
         */
        ISOLATED_BALANCE_INSUFFICIENT(40025, I18nMessages.ISOLATED_BALANCE_INSUFFICIENT),
        /**
         * 不能增加逐仓保证金: 持仓为0
         */
        ADD_ISOLATED_MARGIN_NO_POSITION_REJECT(40026, I18nMessages.ADD_ISOLATED_MARGIN_NO_POSITION_REJECT),
        /**
         * 数量只能为正整数
         */
        AMOUNT_MUST_BE_POSITIVE(40027, I18nMessages.AMOUNT_MUST_BE_POSITIVE),
        /**
         * API-KEY 的类型不正确
         */
        INVALID_API_KEY_TYPE(40028, I18nMessages.INVALID_API_KEY_TYPE),
        /**
         * API-KEY 不正确
         */
        INVALID_RSA_PUBLIC_KEY(40029, I18nMessages.INVALID_RSA_PUBLIC_KEY),
        /**
         * 仓位方向错误
         */
        INVALID_POSITION_SIDE(40030, I18nMessages.INVALID_POSITION_SIDE),
        /**
         * 下单数量达到上限
         */
        OPTIONS_PREMIUM_REACH_LIMIT(40031, I18nMessages.OPTIONS_PREMIUM_REACH_LIMIT),
        /**
         * 用户找不到
         */
        OPTIONS_USER_NOT_FOUND(40032, I18nMessages.OPTIONS_USER_NOT_FOUND),
        /**
         * 批量下单的数量不正确
         */
        INVALID_BATCH_PLACE_ORDER_SIZE(40033, I18nMessages.INVALID_BATCH_PLACE_ORDER_SIZE),
        /**
         * 无法批量下单
         */
        PLACE_BATCH_ORDERS_FAIL(40034, I18nMessages.PLACE_BATCH_ORDERS_FAIL),
        /**
         * 无效的合约类型
         */
        INVALID_CONTRACT_TYPE(40035, I18nMessages.INVALID_CONTRACT_TYPE),
        /**
         * 交易对已下架
         */
        SYMBOL_ALREADY_CLOSED(40036, I18nMessages.SYMBOL_ALREADY_CLOSED),
        /**
         * 无效的交易对状态
         */
        INVALID_OPENING_POSITION_STATUS(40037, I18nMessages.INVALID_OPENING_POSITION_STATUS),
        /**
         * 拒绝：止盈止损单将立即被触发
         */
        STRATEGY_INVALID_TRIGGER_PRICE(40038, I18nMessages.STRATEGY_INVALID_TRIGGER_PRICE),
        /**
         * 逐仓仓位模式下无法降低杠杆
         */
        ISOLATED_LEVERAGE_REJECT_WITH_POSITION(40039, I18nMessages.ISOLATED_LEVERAGE_REJECT_WITH_POSITION),
        /**
         * 无效的间隔
         */
        INVALID_TIME_INTERVAL(40040, I18nMessages.INVALID_TIME_INTERVAL),
        /**
         * 止盈止损订单价格不应高于触发价与报价乘数上限的乘积
         */
        PRICE_HIGHTER_THAN_STOP_MULTIPLIER_UP(40041, I18nMessages.PRICE_HIGHTER_THAN_STOP_MULTIPLIER_UP),
        /**
         * 止盈止损订单价格不应低于触发价与报价乘数下限的乘积
         */
        PRICE_LOWER_THAN_STOP_MULTIPLIER_DOWN(40042, I18nMessages.PRICE_LOWER_THAN_STOP_MULTIPLIER_DOWN);

        private final int code;
        private final String message;

        /**
         * 根据name查找对应value
         *
         * @param code 枚举名称
         * @return java.lang.String
         * @since 1.0.0
         */
        public static String findMessage(int code) {
            for (AbnormalEnum.MSG item : values()) {
                if (item.getCode() == code) {
                    return item.getMessage();
                }
            }

            return null;
        }

        /**
         * 根据value查找对应的name
         *
         * @param message 枚举值
         * @return java.lang.String
         * @since 1.0.0
         */
        public static int findCode(String message) {
            for (AbnormalEnum.MSG item : values()) {
                if (item.getMessage().equals(message)) {
                    return item.getCode();
                }
            }
            return -1;
        }
    }

}
